
package com.example.cia.support;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;

import com.google.zxing.common.BitMatrix;

import android.graphics.Bitmap;

import javax.imageio.ImageIO;
import java.io.File; 
import java.io.OutputStream;
import java.util.Hashtable;
import java.io.IOException; 
import java.awt.image.BufferedImage;

public class QRcodeGet {
	
   private static final int BLACK = 0xFF000000; 
   private static final int WHITE = 0xFFFFFFFF; 
    
   public QRcodeGet() {} 
    
	/**生成二维码返回
	 * @param BitMatrix
	 * @return Buffered image
	 * @throws IOException 
	 */    
   public static  Bitmap GetidQRcode(String s) throws IOException{
	 
       int width = 300; 
       int height = 300; 
       //二维码的图片格式 
       String format = "jpg"; 
       int[] pixels = new int[width*height];
       Hashtable hints = new Hashtable<Object,Object>(); 
       //内容所使用编码 
       hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); 
       BitMatrix bitMatrix = null;
	try {
		bitMatrix = new MultiFormatWriter().encode(s, 
		           BarcodeFormat.QR_CODE, width, height, hints);
	} catch (WriterException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}  
	for(int y = 0; y<width; ++y){
        for(int x = 0; x<height; ++x){
            if(bitMatrix.get(x, y)){
                pixels[y*width+x] = 0xff000000; // black pixel
            } else {
                pixels[y*width+x] = 0xffffffff; // white pixel
            }
        }
    }
	
	Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
	 bmp.setPixels(pixels, 0, width, 0, 0, width, height);
	 return bmp;
   }
   
   public static BufferedImage toBufferedImage(BitMatrix matrix) { 
     int width = matrix.getWidth(); 
     int height = matrix.getHeight(); 
     BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
     for (int x = 0; x < width; x++) { 
       for (int y = 0; y < height; y++) { 
         image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); 
       } 
     } 
     return image; 
   } 
    
   /**写bitMatrix 到文件
	 * @param BitMatrix
	 * @param format
	 * @param file
	 * @return 
	 */  
   public static void writeToFile(BitMatrix matrix, String format, File file) 
       throws IOException { 
     BufferedImage image = toBufferedImage(matrix); 
     if (!ImageIO.write(image, format, file)) { 
       throw new IOException("Could not write an image of format " + format + " to " + file); 
     } 
   } 
   /**写bitMatrix 流
	 * @param BitMatrix
	 * @param format
	 * @param outputstream
	 * @return 
	 */  
      
   public static void writeToStream(BitMatrix matrix, String format, OutputStream stream) 
       throws IOException { 
     BufferedImage image = toBufferedImage(matrix); 
     if (!ImageIO.write(image, format, stream)) { 
       throw new IOException("Could not write an image of format " + format); 
     } 
   } 
 
}



